├── .gitignore ├── LICENSE ├── README.md ├── config.cpp ├── config.h ├── framelesshelper.cpp ├── framelesshelper.h ├── install ├── QIFW │ ├── README │ ├── config │ │ └── config.xml │ ├── packages │ │ └── net.xymov.ifw │ │ │ ├── data │ │ │ ├── LICENSE │ │ │ └── vst-video │ │ │ └── meta │ │ │ ├── installscript.qs │ │ │ └── package.xml │ └── vst-video.pro ├── README.md ├── appimage │ ├── icon.png.png │ ├── install.sh │ └── vst-video.desktop ├── bin │ ├── appimagetool │ ├── linuxdeployqt │ └── patchelf ├── deb │ ├── getdll.sh │ ├── install.sh │ └── output │ │ ├── DEBIAN │ │ └── control │ │ └── usr │ │ ├── share │ │ └── applications │ │ │ └── vst-video.desktop │ │ └── src │ │ └── vst-video │ │ ├── install.sh │ │ └── vst-video └── install.sh ├── main.cpp ├── mainwindow.cpp ├── mainwindow.h ├── mainwindow.ui ├── resource ├── img │ ├── camera_on.svg │ ├── camera_out.svg │ ├── close.svg │ ├── close_deep.svg │ ├── close_light.svg │ ├── front_off.svg │ ├── front_on.svg │ ├── front_out.svg │ ├── full_on.svg │ ├── full_out.svg │ ├── general_on.svg │ ├── general_out.svg │ ├── ico.svg │ ├── icon.png │ ├── list_on.svg │ ├── list_out.svg │ ├── loading.gif │ ├── maximize.svg │ ├── maximize_deep.svg │ ├── maximize_light.svg │ ├── menu.svg │ ├── menu_deep.svg │ ├── menu_light.svg │ ├── minimize.svg │ ├── minimize_deep.svg │ ├── minimize_light.svg │ ├── next_off.svg │ ├── next_on.svg │ ├── next_out.svg │ ├── pallette.svg │ ├── pause_on.svg │ ├── pause_out.svg │ ├── play_at.svg │ ├── play_on.svg │ ├── play_out.svg │ ├── setting_on.svg │ ├── setting_out.svg │ ├── sliderImg.png │ ├── subtitle.svg │ ├── timg.jpeg │ ├── volume-down_on.svg │ ├── volume-down_out.svg │ ├── volume-off_on.svg │ ├── volume-off_out.svg │ ├── volume-up_on.svg │ └── volume-up_out.svg └── source │ ├── live.txt │ └── source.txt ├── resources.qrc ├── set.cpp ├── set.h ├── set.ui ├── vst-video └── vst-video.pro /.gitignore: -------------------------------------------------------------------------------- 1 | # C++ objects and libs 2 | *.slo 3 | *.lo 4 | *.o 5 | *.a 6 | *.la 7 | *.lai 8 | *.so 9 | *.so.* 10 | *.dll 11 | *.dylib 12 | 13 | # Qt-es 14 | object_script.*.Release 15 | object_script.*.Debug 16 | *_plugin_import.cpp 17 | /.qmake.cache 18 | /.qmake.stash 19 | *.pro.user 20 | *.pro.user.* 21 | *.qbs.user 22 | *.qbs.user.* 23 | *.moc 24 | moc_*.cpp 25 | moc_*.h 26 | qrc_*.cpp 27 | ui_*.h 28 | *.qmlc 29 | *.jsc 30 | Makefile* 31 | *build-* 32 | *.qm 33 | *.prl 34 | 35 | # Qt unit tests 36 | target_wrapper.* 37 | 38 | # QtCreator 39 | *.autosave 40 | 41 | # QtCreator Qml 42 | *.qmlproject.user 43 | *.qmlproject.user.* 44 | 45 | # QtCreator CMake 46 | CMakeLists.txt.user* 47 | 48 | # QtCreator 4.8< compilation database 49 | compile_commands.json 50 | 51 | # QtCreator local machine specific files for imported projects 52 | *creator.user* 53 | .DS_Store 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![image](https://github.com/user-attachments/assets/ff51a6ab-a85e-4204-b8b6-e6bb33220bbe) 2 | ![image](https://github.com/user-attachments/assets/bc884cc9-2070-40a8-821d-e27a25b5b273) 3 | 4 | 5 | # Qt 全聚合影视 6 | 基于 Qt 的 QMultiMedia组件构建,目标是搭建deepin v20云播放平台。 7 | "vst-video"文件是已编译好的程序,适用于64位Linux系统Qt5环境,双击运行,终端运行"./install.sh"生成桌面图标。 8 | ### 依赖 9 | sudo apt-get install libqt5multimedia5 libqt5multimediawidgets5 qtmultimedia5-dev 10 | 11 | ### 更新记录: 12 | 13 | #### 2020.05.26 发布 2.55 14 | 主要更新: 15 | * 添加视频渲染选项,可选视频(默认)和绘制(视频有绿边选择此模式可消除); 16 | * 资源设置添加分类过滤功能; 17 | * 视频播放器右键添加刷新功能; 18 | * 修复自选主题缩放BUG; 19 | * 其它细节优化; 20 | 21 | #### 2020.05.25 发布 2.54 22 | 主要更新: 23 | * 优化主题设置,默认使用系统标题栏(可在播放器界面重新设置); 24 | * 优化视频输出组件,提高清晰度,去掉视频对比度调节等失效功能; 25 | * 优化UI及操作体验,现在双击可直接播放; 26 | * 修复若干BUG; 27 | 28 | #### 2020.05.24 发布 V2.53 正式版 29 | 主要更新: 30 | * 优化UI细节问题,修复已知BUG; 31 | 32 | #### 2020.05.22 发布 V2.52 正式版 33 | 主要更新: 34 | * 更换视频输出组件,修复视频边框蓝条闪烁问题; 35 | * 添加视频旋转功能,视频对比度调节等功能暂时失效; 36 | 37 | #### 2020.05.20 发布 V2.51 正式版 38 | 主要更新: 39 | * 添加播放记录功能; 40 | * 添加主题设置功能; 41 | * 标题栏添加功能菜单(置顶,最大化,最小化,关闭等); 42 | 43 | #### 2020.05.19发布 V2.5 正式版 44 | 主要更新: 45 | * 优化UI,标题栏添加设置按钮。 46 | * 修复已知BUG。 47 | 48 | #### 2020.05.16 发布 V2.43 正式版 49 | 主要更新: 50 | * 搜索添加右键功能菜单。 51 | * 播放器UI更新,按钮素材全部改用矢量图。 52 | * 修复首次播放剧集时总是第一集的BUG。 53 | 54 | #### 2020.05.14 发布 V2.42 正式版 55 | 主要更新: 56 | * 浏览器添加右键功能菜单,支持调用关联程序打开。 57 | * 加入关于对话框,去掉标题版本信息。 58 | * 细微调整播放器UI,控制栏改为紫罗兰色 59 | 60 | #### 2020.05.14 发布 V2.41 正式版 61 | 主要更新: 62 | * 浏览器添加右键功能菜单,支持调用关联程序打开。 63 | * 加入关于对话框,去掉标题版本信息。 64 | 65 | #### 2020.05.13 发布 V2.4 正式版 66 | 主要更新: 67 | * 优化启动速度,采用线程刷新资源; 68 | * 添加超时设置,修复可能卡界面的BUG; 69 | * 添加资源设置窗口,方便在软件修改资源; 70 | * 播放器右键添加画面缩放设置; 71 | 72 | #### 2020.05.11 发布 V2.3 正式版 73 | * 播放器右键添加功能菜单,支持本地和远程文件播放; 74 | * 增加对命令行参数的支持,现在可用作本地播放器; 75 | 76 | #### 2020.05.08 发布 V2.2 正式版 77 | * 修复已知BUG,优化操作体验; 78 | * 以deb安装包形式发布。 79 | 80 | 2020.05.08 发布 V2.1 81 | 82 | * 添加直播功能,配置文件为程序目录的live.txt文件,格式和资源一样。 83 | * 修复已知BUG,优化体验。 84 | 85 | 2020.05.06 86 | 87 | 发布v2.0 测试版 88 | 89 | * 软件基本成型,欢迎测试。 90 | 91 | 2020.5.1 92 | * 添加列表显示开关,修复BUG ; 93 | * 添加安装脚本,现在可以安装桌面图标。 94 | 95 | 2020-04-30 96 | *添加等待动画效果; 97 | * 列表播放支持,剧集自动连播放; 98 | * 添加常用快捷键,全屏下可以直接上下箭头控制音量,左右箭头控制快进快退,空格暂停/播放 99 | * 源码采集方式更新,采用xml的DOM遍历方式,取消原来的正则搜索 100 | 101 | 故障排除: 102 | 103 | 有声音无视频: 104 | 【 Linux】 105 | * 报 va 相关错误 106 | 参考:https://bugreports.qt.io/browse/QTBUG-23761 107 | 解决:sudo apt-get remove gstreamer1.0-vaapi 108 | 109 | * 不报错 110 | sudo apt-get install gst123 111 | 下列【新】软件包将被安装: 112 | gst123 gstreamer1.0-pulseaudio gstreamer1.0-x 113 | 114 | 【Windows】 115 | * 安装 LAV Filters 解码或 K-Lite 解码包解决。 116 | 下载地址: https://files3.codecguide.com/K-Lite_Codec_Pack_1544_Standard.exe 117 | 118 | 119 | -------------------------------------------------------------------------------- /config.cpp: -------------------------------------------------------------------------------- 1 | #include "config.h" 2 | #include 3 | #include 4 | 5 | Config::Config(QString qstrfilename) 6 | { 7 | if (qstrfilename.isEmpty()) 8 | { 9 | m_qstrFileName = QDir::currentPath()+ "/Config.ini"; 10 | } 11 | else 12 | { 13 | m_qstrFileName = qstrfilename; 14 | } 15 | 16 | m_psetting = new QSettings(m_qstrFileName, QSettings::IniFormat); 17 | qDebug() << m_qstrFileName; 18 | } 19 | Config::~Config() 20 | { 21 | delete m_psetting; 22 | m_psetting = 0; 23 | } 24 | void Config::set(QString qstrnodename,QString qstrkeyname,QVariant qvarvalue) 25 | { 26 | m_psetting->setValue(QString("/%1/%2").arg(qstrnodename).arg(qstrkeyname), qvarvalue); 27 | } 28 | 29 | QVariant Config::get(QString qstrnodename,QString qstrkeyname) 30 | { 31 | QVariant qvar = m_psetting->value(QString("/%1/%2").arg(qstrnodename).arg(qstrkeyname)); 32 | return qvar; 33 | } 34 | 35 | 36 | void Config::setValue(QString keypath,QVariant qvarvalue) 37 | { 38 | m_psetting->setValue(keypath, qvarvalue); 39 | } 40 | 41 | QVariant Config::getValue(QString keypath) 42 | { 43 | 44 | return m_psetting->value(keypath); 45 | } 46 | 47 | QStringList Config::allKeys(){ 48 | 49 | return m_psetting->allKeys(); 50 | } 51 | 52 | QStringList Config::getKeys(QString key){ 53 | 54 | QStringList list,keys; 55 | list= m_psetting->allKeys(); 56 | 57 | for(int i=0;iremove(keypath); 77 | 78 | } 79 | bool Config::iskey(QString qstrnodename,QString qstrkeyname) 80 | { 81 | return m_psetting->contains(QString("/%1/%2").arg(qstrnodename).arg(qstrkeyname)); 82 | } 83 | 84 | void Config::clear() 85 | { 86 | m_psetting->clear(); 87 | } 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /config.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H 2 | #define CONFIG_H 3 | 4 | #include 5 | #include 6 | 7 | class Config 8 | { 9 | public: 10 | Config(QString qstrfilename = ""); 11 | virtual ~Config(void); 12 | QStringList allKeys(); 13 | QStringList getKeys(QString); 14 | void clear(); 15 | void remove(QString); 16 | bool iskey(QString,QString); 17 | void set(QString,QString,QVariant); 18 | QVariant get(QString,QString); 19 | void setValue(QString,QVariant ); 20 | QVariant getValue(QString); 21 | 22 | 23 | 24 | private: 25 | QString m_qstrFileName; 26 | QSettings *m_psetting; 27 | }; 28 | 29 | #endif // CONFIG_H 30 | -------------------------------------------------------------------------------- /framelesshelper.cpp: -------------------------------------------------------------------------------- 1 | #include "framelesshelper.h" 2 | 3 | int CursorPosCalculator::m_nBorderWidth = 5; 4 | int CursorPosCalculator::m_nTitleHeight = 30; 5 | /***** CursorPosCalculator *****/ 6 | CursorPosCalculator::CursorPosCalculator() 7 | { 8 | reset(); 9 | } 10 | 11 | void CursorPosCalculator::reset() 12 | { 13 | m_bOnEdges = false; 14 | m_bOnLeftEdge = false; 15 | m_bOnRightEdge = false; 16 | m_bOnTopEdge = false; 17 | m_bOnBottomEdge = false; 18 | m_bOnTopLeftEdge = false; 19 | m_bOnBottomLeftEdge = false; 20 | m_bOnTopRightEdge = false; 21 | m_bOnBottomRightEdge = false; 22 | } 23 | 24 | void CursorPosCalculator::recalculate(const QPoint &gMousePos, const QRect &frameRect) 25 | { 26 | int globalMouseX = gMousePos.x(); 27 | int globalMouseY = gMousePos.y(); 28 | 29 | int frameX = frameRect.x(); 30 | int frameY = frameRect.y(); 31 | 32 | int frameWidth = frameRect.width(); 33 | int frameHeight = frameRect.height(); 34 | 35 | m_bOnLeftEdge = (globalMouseX >= frameX && 36 | globalMouseX <= frameX + m_nBorderWidth ); 37 | 38 | 39 | m_bOnRightEdge = (globalMouseX >= frameX + frameWidth - m_nBorderWidth && 40 | globalMouseX <= frameX + frameWidth); 41 | 42 | m_bOnTopEdge = (globalMouseY >= frameY && 43 | globalMouseY <= frameY + m_nBorderWidth ); 44 | 45 | m_bOnBottomEdge = (globalMouseY >= frameY + frameHeight - m_nBorderWidth && 46 | globalMouseY <= frameY + frameHeight); 47 | 48 | m_bOnTopLeftEdge = m_bOnTopEdge && m_bOnLeftEdge; 49 | m_bOnBottomLeftEdge = m_bOnBottomEdge && m_bOnLeftEdge; 50 | m_bOnTopRightEdge = m_bOnTopEdge && m_bOnRightEdge; 51 | m_bOnBottomRightEdge = m_bOnBottomEdge && m_bOnRightEdge; 52 | 53 | m_bOnEdges = m_bOnLeftEdge || m_bOnRightEdge || m_bOnTopEdge || m_bOnBottomEdge; 54 | } 55 | 56 | /***** WidgetData *****/ 57 | WidgetData::WidgetData(FramelessHelperPrivate *_d, QWidget *pTopLevelWidget) 58 | { 59 | d = _d; 60 | m_pWidget = pTopLevelWidget; 61 | m_bLeftButtonPressed = false; 62 | m_bCursorShapeChanged = false; 63 | m_bLeftButtonTitlePressed = false; 64 | m_pRubberBand = NULL; 65 | 66 | m_windowFlags = m_pWidget->windowFlags(); 67 | m_pWidget->setMouseTracking(true); 68 | m_pWidget->setAttribute(Qt::WA_Hover, true); 69 | 70 | updateRubberBandStatus(); 71 | } 72 | 73 | WidgetData::~WidgetData() 74 | { 75 | m_pWidget->setMouseTracking(false); 76 | m_pWidget->setWindowFlags(m_windowFlags); 77 | m_pWidget->setAttribute(Qt::WA_Hover, false); 78 | 79 | delete m_pRubberBand; 80 | m_pRubberBand = NULL; 81 | } 82 | 83 | QWidget* WidgetData::widget() 84 | { 85 | return m_pWidget; 86 | } 87 | 88 | void WidgetData::handleWidgetEvent(QEvent *event) 89 | { 90 | switch (event->type()) 91 | { 92 | default: 93 | break; 94 | 95 | case QEvent::MouseButtonDblClick: 96 | handleMouseButtonDblClickEvent(static_cast(event)); 97 | break; 98 | 99 | case QEvent::MouseButtonPress: 100 | handleMousePressEvent(static_cast(event)); 101 | break; 102 | case QEvent::MouseButtonRelease: 103 | handleMouseReleaseEvent(static_cast(event)); 104 | break; 105 | case QEvent::MouseMove: 106 | handleMouseMoveEvent(static_cast(event)); 107 | break; 108 | case QEvent::Leave: 109 | handleLeaveEvent(static_cast(event)); 110 | break; 111 | case QEvent::HoverMove: 112 | handleHoverMoveEvent(static_cast(event)); 113 | break; 114 | } 115 | } 116 | 117 | void WidgetData::updateRubberBandStatus() 118 | { 119 | if (d->m_bRubberBandOnMove || d->m_bRubberBandOnResize) 120 | { 121 | if (NULL == m_pRubberBand) { 122 | m_pRubberBand = new LinuxRubberBand(QRubberBand::Rectangle); 123 | //m_pRubberBand = new QRubberBand(QRubberBand::Rectangle); 124 | } 125 | } 126 | else 127 | { 128 | delete m_pRubberBand; 129 | m_pRubberBand = NULL; 130 | } 131 | } 132 | 133 | void WidgetData::updateCursorShape(const QPoint &gMousePos) 134 | { 135 | if (m_pWidget->isFullScreen() || m_pWidget->isMaximized()) 136 | { 137 | if (m_bCursorShapeChanged) 138 | { 139 | m_pWidget->unsetCursor(); 140 | } 141 | return; 142 | } 143 | 144 | m_moveMousePos.recalculate(gMousePos, m_pWidget->frameGeometry()); 145 | 146 | if(m_moveMousePos.m_bOnTopLeftEdge || m_moveMousePos.m_bOnBottomRightEdge) 147 | { 148 | m_pWidget->setCursor( Qt::SizeFDiagCursor ); 149 | m_bCursorShapeChanged = true; 150 | } 151 | else if(m_moveMousePos.m_bOnTopRightEdge || m_moveMousePos.m_bOnBottomLeftEdge) 152 | { 153 | m_pWidget->setCursor( Qt::SizeBDiagCursor ); 154 | m_bCursorShapeChanged = true; 155 | } 156 | else if(m_moveMousePos.m_bOnLeftEdge || m_moveMousePos.m_bOnRightEdge) 157 | { 158 | m_pWidget->setCursor( Qt::SizeHorCursor ); 159 | m_bCursorShapeChanged = true; 160 | } 161 | else if(m_moveMousePos.m_bOnTopEdge || m_moveMousePos.m_bOnBottomEdge) 162 | { 163 | m_pWidget->setCursor( Qt::SizeVerCursor ); 164 | m_bCursorShapeChanged = true; 165 | } 166 | else 167 | { 168 | if (m_bCursorShapeChanged) 169 | { 170 | m_pWidget->unsetCursor(); 171 | m_bCursorShapeChanged = false; 172 | } 173 | } 174 | } 175 | 176 | void WidgetData::resizeWidget(const QPoint &gMousePos) 177 | { 178 | QRect origRect; 179 | 180 | if (d->m_bRubberBandOnResize) 181 | origRect = m_pRubberBand->frameGeometry(); 182 | else 183 | origRect = m_pWidget->frameGeometry(); 184 | 185 | 186 | 187 | int left = origRect.left(); 188 | int top = origRect.top(); 189 | int right = origRect.right(); 190 | int bottom = origRect.bottom(); 191 | origRect.getCoords(&left, &top, &right, &bottom); 192 | 193 | //int minWidth = m_pWidget->minimumWidth(); 194 | //int minHeight = m_pWidget->minimumHeight(); 195 | int minWidth = 30; 196 | int minHeight = 30; 197 | 198 | if (m_pressedMousePos.m_bOnTopLeftEdge) 199 | { 200 | left = gMousePos.x(); 201 | top = gMousePos.y(); 202 | } 203 | else if (m_pressedMousePos.m_bOnBottomLeftEdge) 204 | { 205 | left = gMousePos.x(); 206 | bottom = gMousePos.y(); 207 | } 208 | else if (m_pressedMousePos.m_bOnTopRightEdge) 209 | { 210 | right = gMousePos.x(); 211 | top = gMousePos.y(); 212 | } 213 | else if (m_pressedMousePos.m_bOnBottomRightEdge) 214 | { 215 | right = gMousePos.x(); 216 | bottom = gMousePos.y(); 217 | } 218 | else if (m_pressedMousePos.m_bOnLeftEdge) 219 | { 220 | left = gMousePos.x(); 221 | } 222 | else if (m_pressedMousePos.m_bOnRightEdge) 223 | { 224 | right = gMousePos.x(); 225 | } 226 | else if (m_pressedMousePos.m_bOnTopEdge) 227 | { 228 | top = gMousePos.y(); 229 | } 230 | else if (m_pressedMousePos.m_bOnBottomEdge) 231 | { 232 | bottom = gMousePos.y(); 233 | } 234 | 235 | QRect newRect(QPoint(left, top), QPoint(right, bottom)); 236 | 237 | 238 | m_pWidget->setGeometry(newRect); 239 | 240 | 241 | if (newRect.isValid()) 242 | { 243 | if (minWidth > newRect.width()) 244 | { 245 | if (left != origRect.left()) 246 | newRect.setLeft(origRect.left()); 247 | else 248 | newRect.setRight(origRect.right()); 249 | } 250 | if (minHeight > newRect.height()) 251 | { 252 | if (top != origRect.top()) 253 | newRect.setTop(origRect.top()); 254 | else 255 | newRect.setBottom(origRect.bottom()); 256 | } 257 | 258 | if (d->m_bRubberBandOnResize) 259 | { 260 | m_pRubberBand->setGeometry(newRect); 261 | } 262 | else 263 | { 264 | // m_pWidget->setGeometry(newRect); 265 | } 266 | } 267 | } 268 | 269 | void WidgetData::moveWidget(const QPoint& gMousePos) 270 | { 271 | if (d->m_bRubberBandOnMove &&m_bLeftButtonTitlePressed ) 272 | { 273 | m_pRubberBand->move(gMousePos - m_ptDragPos); 274 | } 275 | else 276 | { 277 | m_pWidget->move(gMousePos - m_ptDragPos); 278 | } 279 | } 280 | 281 | void WidgetData::handleMouseButtonDblClickEvent(QMouseEvent *event){ 282 | 283 | if (event->button() == Qt::LeftButton) 284 | { 285 | 286 | if(event->pos().y() < m_moveMousePos.m_nTitleHeight){ 287 | 288 | m_pWidget->isMaximized() ? m_pWidget->showNormal() : m_pWidget->showMaximized(); 289 | } 290 | } 291 | 292 | } 293 | 294 | 295 | void WidgetData::handleMousePressEvent(QMouseEvent *event) 296 | { 297 | if(m_pWidget->isFullScreen() || m_pWidget->isMaximized())return; 298 | 299 | if (event->button() == Qt::LeftButton) 300 | { 301 | m_bLeftButtonPressed = true; 302 | m_bLeftButtonTitlePressed = event->pos().y() < m_moveMousePos.m_nTitleHeight; 303 | 304 | QRect frameRect = m_pWidget->frameGeometry(); 305 | 306 | 307 | // QRect frameRect = m_pWidget->geometry(); 308 | 309 | QRect moveRect(frameRect.x(), frameRect.y(), frameRect.width(), 30); 310 | m_pressedMousePos.recalculate(event->globalPos(), frameRect); 311 | 312 | m_ptDragPos = event->globalPos() - frameRect.topLeft(); 313 | 314 | if (m_pressedMousePos.m_bOnEdges) 315 | { 316 | if (d->m_bRubberBandOnResize) 317 | { 318 | m_pRubberBand->setGeometry(frameRect); 319 | m_pRubberBand->show(); 320 | } 321 | } 322 | else if (d->m_bRubberBandOnMove) 323 | { 324 | if (moveRect.contains(event->globalPos())) { 325 | m_pRubberBand->setGeometry(frameRect); 326 | m_pRubberBand->show(); 327 | } 328 | } 329 | } 330 | } 331 | 332 | void WidgetData::handleMouseReleaseEvent(QMouseEvent *event) 333 | { 334 | // if(m_pWidget->isFullScreen() || m_pWidget->isMaximized())return; 335 | if (event->button() == Qt::LeftButton) 336 | { 337 | m_bLeftButtonPressed = false; 338 | m_bLeftButtonTitlePressed = false; 339 | m_pressedMousePos.reset(); 340 | if (m_pRubberBand && m_pRubberBand->isVisible()) 341 | { 342 | m_pRubberBand->hide(); 343 | m_pWidget->setGeometry(m_pRubberBand->geometry()); 344 | } 345 | } 346 | } 347 | 348 | void WidgetData::handleMouseMoveEvent(QMouseEvent *event) 349 | { 350 | 351 | if(m_pWidget->isFullScreen() || m_pWidget->isMaximized())return; 352 | if (m_bLeftButtonPressed) 353 | { 354 | if (d->m_bWidgetResizable && m_pressedMousePos.m_bOnEdges) 355 | { 356 | resizeWidget(event->globalPos()); 357 | } 358 | 359 | // else if (d->m_bWidgetMovable &&m_bLeftButtonTitlePressed) 360 | 361 | else if (d->m_bWidgetMovable && (m_bLeftButtonTitlePressed |!d->m_bOnlyTitleBarMove)) 362 | { 363 | moveWidget(event->globalPos()); 364 | } 365 | } 366 | else if (d->m_bWidgetResizable) 367 | { 368 | updateCursorShape(event->globalPos()); 369 | } 370 | } 371 | 372 | void WidgetData::handleLeaveEvent(QEvent *event) 373 | { 374 | Q_UNUSED(event) 375 | if (!m_bLeftButtonPressed) 376 | { 377 | m_pWidget->unsetCursor(); 378 | } 379 | } 380 | 381 | void WidgetData::handleHoverMoveEvent(QHoverEvent *event) 382 | { 383 | if (d->m_bWidgetResizable) 384 | { 385 | updateCursorShape(m_pWidget->mapToGlobal(event->pos())); 386 | } 387 | } 388 | 389 | /*****FramelessHelper*****/ 390 | FramelessHelper::FramelessHelper(QObject *parent) 391 | : QObject(parent), 392 | d(new FramelessHelperPrivate()) 393 | { 394 | d->m_bWidgetMovable = true; 395 | d->m_bWidgetResizable = true; 396 | d->m_bRubberBandOnResize = false; 397 | d->m_bRubberBandOnMove = false; 398 | } 399 | 400 | FramelessHelper::~FramelessHelper() 401 | { 402 | QList keys = d->m_widgetDataHash.keys(); 403 | int size = keys.size(); 404 | for (int i = 0; i < size; ++i) { 405 | delete d->m_widgetDataHash.take(keys[i]); 406 | } 407 | 408 | delete d; 409 | } 410 | 411 | bool FramelessHelper::eventFilter(QObject *obj, QEvent *event) 412 | { 413 | switch (event->type()) 414 | { 415 | default:break; 416 | case QEvent::MouseButtonDblClick: 417 | case QEvent::MouseMove: 418 | case QEvent::HoverMove: 419 | case QEvent::MouseButtonPress: 420 | case QEvent::MouseButtonRelease: 421 | case QEvent::Leave: 422 | { 423 | WidgetData *data = d->m_widgetDataHash.value(static_cast(obj)); 424 | if (data) 425 | { 426 | data->handleWidgetEvent(event); 427 | return true; 428 | } 429 | } 430 | } 431 | return QObject::eventFilter(obj, event); 432 | } 433 | 434 | void FramelessHelper::activateOn(QWidget *topLevelWidget) 435 | { 436 | if (!d->m_widgetDataHash.contains(topLevelWidget)) 437 | { 438 | WidgetData *data = new WidgetData(d, topLevelWidget); 439 | d->m_widgetDataHash.insert(topLevelWidget, data); 440 | 441 | topLevelWidget->installEventFilter(this); 442 | } 443 | } 444 | 445 | void FramelessHelper::removeFrom(QWidget *topLevelWidget) 446 | { 447 | WidgetData *data = d->m_widgetDataHash.take(topLevelWidget); 448 | if (data) 449 | { 450 | topLevelWidget->removeEventFilter(this); 451 | delete data; 452 | } 453 | } 454 | 455 | 456 | 457 | 458 | void FramelessHelper::setRubberBandOnMove(bool movable) 459 | { 460 | d->m_bRubberBandOnMove = movable; 461 | QList list = d->m_widgetDataHash.values(); 462 | foreach (WidgetData *data, list) 463 | { 464 | data->updateRubberBandStatus(); 465 | } 466 | } 467 | 468 | void FramelessHelper::setWidgetMovable(bool movable) 469 | { 470 | d->m_bWidgetMovable = movable; 471 | } 472 | 473 | void FramelessHelper::setOnlyTitleBarMove(bool movable){ 474 | 475 | d->m_bOnlyTitleBarMove = movable; 476 | } 477 | 478 | void FramelessHelper::setWidgetResizable(bool resizable) 479 | { 480 | d->m_bWidgetResizable = resizable; 481 | } 482 | 483 | void FramelessHelper::setRubberBandOnResize(bool resizable) 484 | { 485 | d->m_bRubberBandOnResize = resizable; 486 | QList list = d->m_widgetDataHash.values(); 487 | foreach (WidgetData *data, list) 488 | { 489 | data->updateRubberBandStatus(); 490 | } 491 | } 492 | 493 | void FramelessHelper::setBorderWidth(uint width) 494 | { 495 | if (width > 0) 496 | { 497 | CursorPosCalculator::m_nBorderWidth = width; 498 | } 499 | } 500 | 501 | void FramelessHelper::setTitleHeight(uint height) 502 | { 503 | if (height > 0) 504 | { 505 | CursorPosCalculator::m_nTitleHeight = height; 506 | } 507 | } 508 | 509 | bool FramelessHelper::widgetMovable() 510 | { 511 | return d->m_bWidgetMovable; 512 | } 513 | 514 | bool FramelessHelper::widgetResizable() 515 | { 516 | return d->m_bWidgetResizable; 517 | } 518 | 519 | bool FramelessHelper::rubberBandOnMove() 520 | { 521 | return d->m_bRubberBandOnMove; 522 | } 523 | 524 | bool FramelessHelper::rubberBandOnResisze() 525 | { 526 | return d->m_bRubberBandOnResize; 527 | } 528 | 529 | uint FramelessHelper::borderWidth() 530 | { 531 | return CursorPosCalculator::m_nBorderWidth; 532 | } 533 | 534 | uint FramelessHelper::titleHeight() 535 | { 536 | return CursorPosCalculator::m_nTitleHeight; 537 | } 538 | 539 | -------------------------------------------------------------------------------- /framelesshelper.h: -------------------------------------------------------------------------------- 1 | #ifndef FRAMELESSHELPER_H 2 | #define FRAMELESSHELPER_H 3 | #include 4 | #include 5 | #include 6 | 7 | 8 | #include 9 | class WidgetData; 10 | class LinuxRubberBand : public QRubberBand 11 | { 12 | public: 13 | LinuxRubberBand(Shape s, QWidget * p = 0 ) 14 | : QRubberBand( s, p ) 15 | { 16 | QPalette palette; 17 | palette.setBrush( QPalette::WindowText, QBrush(Qt::lightGray) ); 18 | setPalette(palette); 19 | repaint(); 20 | } 21 | 22 | protected: 23 | virtual void paintEvent( QPaintEvent * ) 24 | { 25 | QStylePainter painter(this); 26 | QStyleOptionFocusRect option; 27 | option.initFrom(this); 28 | 29 | QPen pen; 30 | pen.setStyle(Qt::DashLine); 31 | pen.setWidth(1); 32 | pen.setColor(QColor(Qt::red)); 33 | painter.setPen(pen); 34 | painter.drawControl(QStyle::CE_FocusFrame, option); 35 | } 36 | 37 | }; 38 | /***** 39 | * FramelessHelperPrivate 40 | * 存储界面对应的数据集合,以及是否可移动、可缩放属性 41 | *****/ 42 | class FramelessHelperPrivate 43 | { 44 | public: 45 | QHash m_widgetDataHash; 46 | bool m_bWidgetMovable : true; 47 | bool m_bWidgetResizable : true; 48 | bool m_bRubberBandOnResize : true; 49 | bool m_bRubberBandOnMove : true; 50 | bool m_bOnlyTitleBarMove : true; 51 | }; 52 | 53 | /***** 54 | * CursorPosCalculator 55 | * 计算鼠标是否位于左、上、右、下、左上角、左下角、右上角、右下角 56 | *****/ 57 | class CursorPosCalculator 58 | { 59 | public: 60 | explicit CursorPosCalculator(); 61 | void reset(); 62 | void recalculate(const QPoint &globalMousePos, const QRect &frameRect); 63 | 64 | public: 65 | bool m_bOnEdges : true; 66 | bool m_bOnLeftEdge : true; 67 | bool m_bOnRightEdge : true; 68 | bool m_bOnTopEdge : true; 69 | bool m_bOnBottomEdge : true; 70 | bool m_bOnTopLeftEdge : true; 71 | bool m_bOnBottomLeftEdge : true; 72 | bool m_bOnTopRightEdge : true; 73 | bool m_bOnBottomRightEdge : true; 74 | static int m_nBorderWidth; 75 | static int m_nTitleHeight; 76 | 77 | 78 | }; 79 | 80 | /***** 81 | * WidgetData 82 | * 更新鼠标样式、移动窗体、缩放窗体 83 | *****/ 84 | class WidgetData 85 | { 86 | public: 87 | explicit WidgetData(FramelessHelperPrivate *d, QWidget *pTopLevelWidget); 88 | ~WidgetData(); 89 | QWidget* widget(); 90 | // 处理鼠标事件-划过、厉害、按下、释放、移动 91 | void handleWidgetEvent(QEvent *event); 92 | // 更新橡皮筋状态 93 | void updateRubberBandStatus(); 94 | 95 | private: 96 | // 更新鼠标样式 97 | void updateCursorShape(const QPoint &gMousePos); 98 | // 重置窗体大小 99 | void resizeWidget(const QPoint &gMousePos); 100 | // 移动窗体 101 | void moveWidget(const QPoint &gMousePos); 102 | // 处理鼠标双击 103 | void handleMouseButtonDblClickEvent(QMouseEvent *event); 104 | // 处理鼠标按下 105 | void handleMousePressEvent(QMouseEvent *event); 106 | // 处理鼠标释放 107 | void handleMouseReleaseEvent(QMouseEvent *event); 108 | // 处理鼠标移动 109 | void handleMouseMoveEvent(QMouseEvent *event); 110 | // 处理鼠标离开 111 | void handleLeaveEvent(QEvent *event); 112 | // 处理鼠标进入 113 | void handleHoverMoveEvent(QHoverEvent *event); 114 | 115 | 116 | private: 117 | FramelessHelperPrivate *d; 118 | LinuxRubberBand *m_pRubberBand; 119 | //QRubberBand *m_pRubberBand; 120 | QWidget *m_pWidget; 121 | QPoint m_ptDragPos; 122 | CursorPosCalculator m_pressedMousePos; 123 | CursorPosCalculator m_moveMousePos; 124 | bool m_bLeftButtonPressed; 125 | bool m_bCursorShapeChanged; 126 | bool m_bLeftButtonTitlePressed; 127 | Qt::WindowFlags m_windowFlags; 128 | }; 129 | 130 | class FramelessHelper : public QObject 131 | { 132 | Q_OBJECT 133 | 134 | public: 135 | explicit FramelessHelper(QObject *parent = 0); 136 | ~FramelessHelper(); 137 | // 激活窗体 138 | void activateOn(QWidget *topLevelWidget); 139 | // 移除窗体 140 | void removeFrom(QWidget *topLevelWidget); 141 | // 设置窗体移动 142 | void setWidgetMovable(bool movable); 143 | // 设置是否只标题区移动 144 | void setOnlyTitleBarMove(bool movable); 145 | // 设置窗体缩放 146 | void setWidgetResizable(bool resizable); 147 | // 设置橡皮筋移动 148 | void setRubberBandOnMove(bool movable); 149 | // 设置橡皮筋缩放 150 | void setRubberBandOnResize(bool resizable); 151 | // 设置边框的宽度 152 | void setBorderWidth(uint width); 153 | // 设置标题栏高度 154 | void setTitleHeight(uint height); 155 | 156 | bool widgetResizable(); 157 | bool widgetMovable(); 158 | bool rubberBandOnMove(); 159 | bool rubberBandOnResisze(); 160 | uint borderWidth(); 161 | uint titleHeight(); 162 | 163 | protected: 164 | // 事件过滤,进行移动、缩放等 165 | virtual bool eventFilter(QObject *obj, QEvent *event); 166 | 167 | private: 168 | FramelessHelperPrivate *d; 169 | }; 170 | 171 | #endif // FRAMELESSHELPER_H 172 | -------------------------------------------------------------------------------- /install/QIFW/README: -------------------------------------------------------------------------------- 1 | Shows how to add an entry to the Windows start menu. 2 | 3 | Generate installer with 4 | 5 | binarycreator --offline-only -c config/config.xml -p packages installer 6 | 7 | -------------------------------------------------------------------------------- /install/QIFW/config/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 全聚合影视 4 | 2.3.0 5 | 全聚合影视 6 | Qt-Project 7 | 8 | Qt Installer Framework Examples 9 | @HomeDir@/vst-video 10 | 11 | -------------------------------------------------------------------------------- /install/QIFW/packages/net.xymov.ifw/data/LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /install/QIFW/packages/net.xymov.ifw/data/vst-video: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/install/QIFW/packages/net.xymov.ifw/data/vst-video -------------------------------------------------------------------------------- /install/QIFW/packages/net.xymov.ifw/meta/installscript.qs: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** 3 | ** Copyright (C) 2017 The Qt Company Ltd. 4 | ** Contact: https://www.qt.io/licensing/ 5 | ** 6 | ** This file is part of the FOO module of the Qt Toolkit. 7 | ** 8 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ 9 | ** Commercial License Usage 10 | ** Licensees holding valid commercial Qt licenses may use this file in 11 | ** accordance with the commercial license agreement provided with the 12 | ** Software or, alternatively, in accordance with the terms contained in 13 | ** a written agreement between you and The Qt Company. For licensing terms 14 | ** and conditions see https://www.qt.io/terms-conditions. For further 15 | ** information use the contact form at https://www.qt.io/contact-us. 16 | ** 17 | ** GNU General Public License Usage 18 | ** Alternatively, this file may be used under the terms of the GNU 19 | ** General Public License version 3 as published by the Free Software 20 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 21 | ** included in the packaging of this file. Please review the following 22 | ** information to ensure the GNU General Public License requirements will 23 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 24 | ** 25 | ** $QT_END_LICENSE$ 26 | ** 27 | ****************************************************************************/ 28 | 29 | function Component() 30 | { 31 | // default constructor 32 | } 33 | 34 | Component.prototype.createOperations = function() 35 | { 36 | // call default implementation to actually install README.txt! 37 | component.createOperations(); 38 | 39 | if (systemInfo.productType === "windows") { 40 | component.addOperation("CreateShortcut", "@TargetDir@/README.txt", "@StartMenuDir@/README.lnk", 41 | "workingDirectory=@TargetDir@", "iconPath=%SystemRoot%/system32/SHELL32.dll", 42 | "iconId=2", "description=Open README file"); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /install/QIFW/packages/net.xymov.ifw/meta/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 主程序 4 | 必装,全聚合影视主程序 5 | 2.2.0-1 6 | 2020-05-10 7 | true 8 | 9 | 10 | -------------------------------------------------------------------------------- /install/QIFW/vst-video.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = aux 2 | 3 | INSTALLER = installer 4 | 5 | INPUT = $$PWD/config/config.xml $$PWD/packages 6 | example.input = INPUT 7 | example.output = $$INSTALLER 8 | example.commands = binarycreator -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT} 9 | example.CONFIG += target_predeps no_link combine 10 | 11 | QMAKE_EXTRA_COMPILERS += example 12 | 13 | OTHER_FILES = 14 | 15 | DISTFILES += \ 16 | ../../../Qt/QtIFW-3.2.2/doc/ifw.qch \ 17 | packages/net.xymov.ifw/meta/installscript.qs 18 | -------------------------------------------------------------------------------- /install/README.md: -------------------------------------------------------------------------------- 1 | 参考文章:https://blog.csdn.net/Adieu_csdn/article/details/102638934?#linuxdeployqt_5 2 | 3 | 打包前先收集应用依赖,linux下推荐用linuxdeployqt,收集的比较全面,用法是linuxdeployqt appname 4 | 5 | 我已经收集好了需要的工具,在bin目录,可通过脚本install.sh 一键安装到系统。 6 | 7 | deb或其他打包工具打包时需要复制生成的依赖文件到应用同目录。 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /install/appimage/icon.png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/install/appimage/icon.png.png -------------------------------------------------------------------------------- /install/appimage/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #参考文章:https://blog.csdn.net/Adieu_csdn/article/details/102638934?#linuxdeployqt_5 4 | 5 | linuxdeployqt vst-video -appimage 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /install/appimage/vst-video.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Categories=AudioVideo; 3 | Comment=vst-video player 4 | Exec=vst-video %u 5 | Name=vst-video 6 | Path=/usr/src/vst-video 7 | Terminal=false 8 | Type=Application 9 | Icon=icon.png 10 | X-AppImage-Version=5410991 11 | -------------------------------------------------------------------------------- /install/bin/appimagetool: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/install/bin/appimagetool -------------------------------------------------------------------------------- /install/bin/linuxdeployqt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/install/bin/linuxdeployqt -------------------------------------------------------------------------------- /install/bin/patchelf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/install/bin/patchelf -------------------------------------------------------------------------------- /install/deb/getdll.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #拷贝依赖运行库 4 | exe="./usr/src/vst-video/vst-video" #发布的程序名称 5 | des="./usr/lib/vst-video" #你的路径 6 | deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }') 7 | cp $deplist $des 8 | 9 | 10 | -------------------------------------------------------------------------------- /install/deb/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #拷贝依赖运行库 4 | 5 | #exe="./usr/src/vst-video/vst-video" #发布的程序名称 6 | #des="./usr/lib/vst-video" #你的路径 7 | #deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }') 8 | #cp $deplist $des 9 | 10 | #开始打包 11 | sudo chmod 755 * -R 12 | 13 | dpkg -b output vst-video.deb 14 | -------------------------------------------------------------------------------- /install/deb/output/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: vst-video 2 | Version: 2.55 3 | Section: net 4 | Priority: optional 5 | Architecture: amd64 6 | Depends:libqt5xml5,libqt5concurrent5,libqt5multimedia5,libqt5multimediawidgets5,libqt5core5a,libqt5gui5,libqt5widgets5,libqt5network5 7 | Recommends:gst123 8 | Installed-Size: 512 9 | Maintainer: nohacks@vip.qq.com 10 | Description: 全聚合影视 打造linux云播放平台,项目地址:https://github.com/xymov/vst-video 11 | -------------------------------------------------------------------------------- /install/deb/output/usr/share/applications/vst-video.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Encoding=UTF-8 3 | Categories=AudioVideo;Application; 4 | Comment=vst-video player 5 | Exec=/usr/src/vst-video/vst-video %u 6 | Icon=/usr/share/icons/vst-video/icon.svg 7 | Name=全聚合影视 8 | Path=/usr/src/vst-video 9 | Terminal=false 10 | Type=Application 11 | MimeType=application/ogg;application/vnd.apple.mpegurl;application/vnd.rn-realmedia;application/x-extension-mp4;application/x-flac;application/x-matroska;application/x-ogg;application/xspf+xml;image/vnd.rn-realpix;misc/ultravox;video/3gpp;video/dv;video/mp2t;video/mp4;video/x-m4v;video/mp4v-es;video/mpeg;video/msvideo;video/ogg;video/quicktime;video/vnd.rn-realvideo;video/webm;video/x-anim;video/x-avi;video/x-flc;video/x-fli;video/x-flv;video/x-matroska;video/x-mpeg;video/x-ms-asf;video/x-msvideo;video/x-ms-wmv;video/x-nsv;video/x-ogm+ogg;video/x-theora+ogg;x-content/video-dvd;x-content/video-svcd;x-content/video-vcd;x-scheme-handler/mms;x-scheme-handler/rtmp;x-scheme-handler/rtsp; 12 | 13 | 14 | -------------------------------------------------------------------------------- /install/deb/output/usr/src/vst-video/install.sh: -------------------------------------------------------------------------------- 1 | s="[Desktop Entry]\nName=全聚合影视\nComment=Media player\nExec=`pwd`/vst-video %u\nIcon=`pwd`/icon.svg\nPath=`pwd`\nTerminal=false\nType=Application\nCategories=AudioVideo;" 2 | echo -e $s > vst-video.desktop 3 | cp `pwd`/vst-video.desktop ~/.local/share/applications/vst-video.desktop 4 | cp `pwd`/vst-video.desktop ~/Desktop/vst-video.desktop 5 | -------------------------------------------------------------------------------- /install/deb/output/usr/src/vst-video/vst-video: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/install/deb/output/usr/src/vst-video/vst-video -------------------------------------------------------------------------------- /install/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo cp -r bin/ /usr/local/ 3 | 4 | sudo chmod -R a+x /usr/local/bin/ 5 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | 3 | #include 4 | 5 | #include 6 | 7 | int main(int argc, char *argv[]) 8 | { 9 | //适配高清屏 10 | #if (QT_VERSION >= QT_VERSION_CHECK(5,9,0)) 11 | QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 12 | 13 | #endif 14 | QApplication a(argc, argv); 15 | 16 | //解决汉字乱码问题 17 | QTextCodec *codec = QTextCodec::codecForName("UTF-8"); 18 | QTextCodec::setCodecForLocale(codec); 19 | qRegisterMetaType("SourceInfo"); 20 | qRegisterMetaType("Appinfo"); 21 | qSetMessagePattern("[ %{file}: %{line} ] %{message}"); 22 | MainWindow w; 23 | a.connect(&a, SIGNAL(lastWindowClosed()),&a,SLOT(quit())); 24 | 25 | 26 | 27 | 28 | //a.setQuitOnLastWindowClosed(true); 29 | w.show(); 30 | return a.exec(); 31 | } 32 | -------------------------------------------------------------------------------- /mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | #include 4 | #include 5 | #include "set.h" 6 | #include "config.h" 7 | 8 | 9 | 10 | 11 | //QMediaPlayer 12 | #include //add 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | 24 | //QtNetwork 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | 31 | //log 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | 38 | //xml 39 | #include 40 | #include 41 | 42 | //QThread 43 | #include 44 | #include 45 | 46 | 47 | #include 48 | #include 49 | #include 50 | 51 | 52 | #include 53 | #include 54 | #include 55 | #include 56 | #include 57 | #include 58 | #include 59 | #include 60 | 61 | #include 62 | #include 63 | #include 64 | #include 65 | #include 66 | #include 67 | #include 68 | #include 69 | 70 | 71 | 72 | //运行信息 73 | typedef struct Appinfo 74 | { 75 | bool playlist; 76 | 77 | int videoMode=0; 78 | 79 | QString sourcePath; 80 | 81 | QString livePath; 82 | 83 | QString cache; 84 | 85 | QString nopic; 86 | 87 | QString notes; 88 | 89 | bool playState; 90 | 91 | int angle=0, mh=1, mv=1; 92 | int page; 93 | 94 | QStringList arguments; 95 | 96 | Qt::WindowFlags Flags; 97 | 98 | bool live; 99 | 100 | bool liveload; 101 | 102 | Qt::WindowStates windowState; 103 | 104 | }Appinfo; 105 | Q_DECLARE_METATYPE(Appinfo); 106 | 107 | 108 | 109 | //名称信息 110 | typedef struct Nameinfo 111 | { 112 | QString id; 113 | QString name; 114 | }Nameinfo; 115 | Q_DECLARE_METATYPE(Nameinfo); 116 | 117 | //名称信息 118 | typedef struct Notesinfo 119 | { 120 | QString title; 121 | QString api; 122 | QString id; 123 | QString part; 124 | QString time; 125 | }Notesinfo; 126 | Q_DECLARE_METATYPE(Notesinfo); 127 | 128 | 129 | 130 | //资源信息 131 | typedef struct SourceInfo 132 | { 133 | QString name; //资源名称 134 | QString api; //接口地址 135 | QQueuetype; //分类信息 136 | }SourceInfo; 137 | Q_DECLARE_METATYPE(SourceInfo); 138 | 139 | 140 | 141 | //视频信息 142 | typedef struct VideoInfo 143 | { 144 | QString sname; //接口名称 145 | QString api; //接口地址 146 | QString page; //当前页数 147 | QString pagecount; //总页数 148 | QString pagesize; //页视频数量 149 | QString recordcount; //总数量 150 | QListlast; //日期 151 | QListid; //id 152 | QListtid; //分类ID 153 | QListname; //视频名称 154 | QListtname; //分类名称 155 | QListpic; //视频图片 156 | QListlang; //语言 157 | QListarea; //地区 158 | QListyear; //年份 159 | QListnote; //视频标签 160 | QListactor; //演员 161 | QListstate; //状态 162 | QListdirector; //导演 163 | QListvideo; //视频信息 第01集$index.m3u8$ckm3u8#第02集$index.m3u8$ckm3u8#第03集$index.m3u8$ckm3u8 164 | QListdes; //视频简介 165 | QQueuetype; //分类信息 166 | void clear(){ 167 | api.clear();page.clear();pagecount.clear();pagesize.clear();recordcount.clear(); type.clear(); 168 | last.clear();id.clear();tid.clear();name.clear();tname.clear();pic.clear();video.clear();des.clear(); 169 | lang.clear();area.clear();year.clear();note.clear(); actor.clear();state.clear();director.clear(); 170 | } 171 | 172 | /* 173 | operator QVariant() const 174 | { 175 | return QVariant::fromValue(*this); 176 | 177 | */ 178 | 179 | }VideoInfo; 180 | Q_DECLARE_METATYPE(VideoInfo); 181 | 182 | 183 | QT_BEGIN_NAMESPACE 184 | namespace Ui { class MainWindow; } 185 | QT_END_NAMESPACE 186 | 187 | class MainWindow : public QMainWindow 188 | { 189 | Q_OBJECT 190 | 191 | public: 192 | MainWindow(QWidget *parent = nullptr); 193 | ~MainWindow(); 194 | 195 | private slots: 196 | 197 | 198 | void on_pushButton_paly_clicked(); 199 | 200 | void on_pushButton_next_clicked(); 201 | 202 | void on_pushButton_sound_clicked(); 203 | 204 | void on_pushButton_full_clicked(); 205 | 206 | void sliderProgressReleased(); 207 | 208 | void positionChange(qint64); 209 | 210 | void durationChange(qint64); 211 | 212 | void mediaStatusChanged(QMediaPlayer::MediaStatus); 213 | void stateChanged(QMediaPlayer::State); 214 | 215 | void on_sliderProgress_sliderMoved(int position); 216 | 217 | void on_comboBox_name_currentIndexChanged(int index); 218 | 219 | void on_comboBox_part_currentIndexChanged(int index); 220 | //bool close(); 221 | void addseek(); 222 | void decseek(); 223 | void volumeUp(); 224 | void volumeDown(); 225 | void TimerTimeOut(); 226 | 227 | void on_pushButton_playlist_clicked(); 228 | 229 | void on_value_Slider_valueChanged(int value); 230 | 231 | void volumeChange(int value); 232 | 233 | void on_tree_source_pressed(const QModelIndex &index); 234 | 235 | void init(); 236 | 237 | void on_listWidget_currentRowChanged(int currentRow); 238 | 239 | void on_page_front_clicked(); 240 | 241 | void on_page_next_clicked(); 242 | 243 | void on_page_jmp_clicked(); 244 | 245 | void getpageinfo (int page); 246 | 247 | void loadMedia(int); 248 | 249 | void on_info_play_clicked(); 250 | 251 | void on_info_front_clicked(); 252 | 253 | void on_info_next_clicked(); 254 | 255 | void on_search_ok_clicked(); 256 | 257 | void on_tabWidget_currentChanged(int index); 258 | 259 | 260 | void on_search_source_currentIndexChanged(int index); 261 | 262 | void PlayMenu(const QPoint &pos); 263 | 264 | void ExploreMenu(const QPoint &pos); 265 | 266 | void on_action_open_triggered(); 267 | 268 | void on_action_openurl_triggered(); 269 | 270 | 271 | 272 | void on_action_videosize_IgnoreAspectRatio_triggered(); 273 | 274 | void on_action_videosize_KeepAspectRatio_triggered(); 275 | 276 | void on_action_videosize_KeepAspectRatioByExpanding_triggered(); 277 | 278 | void on_action_explore_play_triggered(); 279 | 280 | void on_action_explore_xopen_triggered(); 281 | 282 | void on_action_explore_xplay_triggered(); 283 | 284 | void on_action_explore_xnew_triggered(); 285 | 286 | void on_action_about_triggered(); 287 | 288 | void on_pushButton_front_clicked(); 289 | 290 | void on_pushButton_setting_clicked(); 291 | 292 | void on_search_list_clicked(const QModelIndex &index); 293 | 294 | 295 | 296 | // void on_action_mini_mode_triggered(); 297 | 298 | void on_action_exit_triggered(); 299 | 300 | 301 | void on_pushButton_close_clicked(); 302 | 303 | void on_pushButton_mini_clicked(); 304 | 305 | void on_pushButton_seting_clicked(); 306 | 307 | void on_pushButton_max_clicked(); 308 | 309 | void on_action_resource_triggered(); 310 | 311 | void renotes(); 312 | 313 | void menu_action_notes_triggered(QAction *); 314 | 315 | //void on_action_tophint_triggered(); 316 | 317 | void setWindowsTopHint(bool); 318 | 319 | void TitlebarMenu(const QPoint &pos); 320 | 321 | void on_action_theme_1_triggered(); 322 | 323 | void on_action_theme_2_triggered(); 324 | 325 | 326 | void on_action_rotate_left_triggered(); 327 | 328 | void on_action_rotate_right_triggered(); 329 | 330 | void on_action_rotate_x_triggered(); 331 | 332 | void on_action_rotate_y_triggered(); 333 | 334 | void switchtheme(int,bool); 335 | 336 | 337 | 338 | void on_action_tophint_triggered(); 339 | 340 | void on_box_explore_currentChanged(int index); 341 | void Sleep(int msec); 342 | 343 | void on_action_update_triggered(); 344 | 345 | void on_action_set_triggered(); 346 | 347 | void bufferStatusChanged(int); 348 | 349 | 350 | 351 | 352 | 353 | void on_action_theme_0_triggered(); 354 | 355 | 356 | 357 | 358 | void on_action_video_triggered(); 359 | 360 | void on_action_graphics_triggered(); 361 | 362 | 363 | void on_action_break_triggered(); 364 | 365 | signals: 366 | 367 | 368 | void quit(); 369 | void setshow(); 370 | 371 | 372 | protected: 373 | virtual void resizeEvent(QResizeEvent *event) override; 374 | virtual bool eventFilter(QObject *target, QEvent *event) override; 375 | private: 376 | 377 | Ui::MainWindow *ui; 378 | 379 | //窗口任意移动 380 | bool m_bDrag=false; 381 | QPoint mouseStartPoint; 382 | QPoint windowTopLeftPoint; 383 | 384 | 385 | QStandardItemModel *student_model; 386 | QString STimeDuration="00:00:00"; 387 | QMediaPlaylist *playlist; 388 | QMediaPlayer *player; 389 | QVideoWidget *video; 390 | 391 | QString API; 392 | QTimer *m_timer; 393 | QMutex mtx; 394 | set seting; 395 | QDialog loading; 396 | Config config; 397 | 398 | 399 | 400 | QGraphicsScene *scene; 401 | QGraphicsVideoItem *GVI; 402 | QGraphicsTextItem *GTI; 403 | QWidget* viewWidget,*expWidget,*searchWidget; 404 | 405 | 406 | 407 | 408 | 409 | int widthV, heightV; 410 | 411 | void viewresize(); 412 | void setSTime(qint64); 413 | void getCommond(); 414 | void setVideoMode(Qt::AspectRatioMode mode); 415 | void echoload(bool echo); 416 | 417 | void ThreadFunc(int,QString); 418 | void createListWidget(QListWidget *listWidget,int key,bool insert); 419 | void createLoading(); 420 | void createVolume(); 421 | void switchFullScreen(bool); 422 | void loadPlay(bool play,int index,qint64 time); 423 | 424 | void MinWriteNotes(int index); 425 | 426 | void showMessage(QString,bool); 427 | 428 | void hideMessage(); 429 | 430 | 431 | 432 | //运行信息 433 | Appinfo app; 434 | 435 | 436 | //影片信息 437 | 438 | QStandardItemModel * model; 439 | 440 | //资源分类信息 441 | 442 | // QMaptype; 443 | 444 | QQueuetype; 445 | 446 | 447 | //搜索资源信息 448 | 449 | QQueuevSearch; 450 | 451 | //播放资源信息 452 | VideoInfo vInfo; 453 | 454 | void initListWidget(QListWidget *listWidget); 455 | 456 | 457 | //取网页数据 458 | QString UrlRequestGet( const QString url ) 459 | { 460 | //异常处理 461 | 462 | try 463 | { 464 | QNetworkAccessManager qnam; 465 | const QUrl aurl( url ); 466 | QNetworkRequest qnr( aurl ); 467 | qnr.setRawHeader("Content-Type","application/json"); 468 | QNetworkReply *reply = qnam.get( qnr ); 469 | QEventLoop eventloop; 470 | QTimer::singleShot(20000, &eventloop, SLOT(quit())); //超时20秒 471 | connect( reply,SIGNAL(finished()),&eventloop,SLOT(quit())); 472 | eventloop.exec( QEventLoop::ExcludeUserInputEvents); 473 | QTextCodec *codec = QTextCodec::codecForName("utf8"); 474 | QString replyData = codec->toUnicode( reply->readAll() ); 475 | 476 | reply->deleteLater(); 477 | reply = nullptr; 478 | 479 | return replyData; 480 | 481 | }catch(int n){ 482 | 483 | qDebug()<<"num="<readAll()); 509 | currentPicture.save(filename);//保存图片 510 | reply->deleteLater(); 511 | reply = nullptr; 512 | 513 | } 514 | 515 | }catch(int n){ 516 | 517 | qDebug()<<"num="<toUnicode( reply->readAll() ); 539 | 540 | reply->deleteLater(); 541 | reply =nullptr; 542 | 543 | return replyData; 544 | } 545 | 546 | //写日志 547 | void log( const QString &logFile, const QByteArray &data ) 548 | { 549 | QFile file( logFile ); 550 | if( file.open(QIODevice::WriteOnly | QIODevice::Append) ) 551 | { 552 | QByteArray ba = QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss" ).toLocal8Bit(); 553 | ba += " " + data + "\n"; 554 | file.write( ba ); 555 | file.close(); 556 | } 557 | } 558 | //xml文本转dom对象 559 | QDomElement xmltoDom(QString xmlText) 560 | { 561 | QDomDocument doc; doc.setContent(xmlText.toUtf8()); 562 | 563 | QDomElement docElem = doc.documentElement(); 564 | 565 | return docElem; 566 | } 567 | 568 | //dom遍历xml获取影片信息 569 | void listDom(QDomElement docElem,VideoInfo &cInfo) 570 | { 571 | 572 | QDomNode node = docElem.firstChild(); 573 | //if(node.toElement().isNull()){} 574 | while(!node.isNull()) 575 | { 576 | QDomElement element = node.toElement(); 577 | if( !element.isNull() ) 578 | { 579 | //页面信息 580 | if(element.tagName()=="list"){ 581 | cInfo.page=element.attribute("page"); 582 | cInfo.pagecount=element.attribute("pagecount"); 583 | cInfo.pagesize=element.attribute("pagesize"); 584 | cInfo.recordcount=element.attribute("recordcount"); 585 | }else if(element.tagName()=="last"){cInfo.last<toUnicode(ch); 650 | } 651 | 652 | //取所有资源类型 653 | void getclass(const QString pfile){ 654 | 655 | //QQueuetype; 656 | 657 | QFile file(pfile);type.clear(); 658 | if(file.open(QIODevice::ReadOnly|QIODevice::Text)){ 659 | for(int i=0;!file.atEnd();i++){ 660 | QByteArray line = file.readLine().trimmed(); 661 | QString str(line);str=str.toUtf8(); 662 | if(str!=""){ 663 | QStringList list =str.split(","); 664 | SourceInfo info;info.name=list.value(0);info.api=list.value(1); 665 | getvideo(3,info.api);info.type=vInfo.type;type.insert(i,info); 666 | } 667 | } 668 | file.close(); 669 | } 670 | } 671 | 672 | //取直播 673 | void getlive(const QString pfile){ 674 | QFile file(pfile); 675 | if(file.open(QIODevice::ReadOnly|QIODevice::Text)){ 676 | SourceInfo info; info.name="直播列表"; 677 | for(int i=0;!file.atEnd();i++){ 678 | QByteArray line = file.readLine().trimmed(); 679 | QString str(line);str=str.toUtf8(); 680 | if(str!=""){ 681 | QStringList list =str.split(","); 682 | Nameinfo var; var.name=list.value(0);var.id=list.value(1); 683 | info.type.insert(i,var); 684 | } 685 | } 686 | file.close(); 687 | 688 | if(info.type.size()>0){type.append(info);} 689 | } 690 | } 691 | 692 | //搜索资源站 693 | void search(QString searchword,int ctype=0) 694 | { 695 | QString done,url,api;vSearch.clear(); 696 | if(ctype==0) 697 | { 698 | foreach (SourceInfo it, type) 699 | { 700 | VideoInfo cInfo; //重要,清空数据 701 | url=it.api+"?wd="+searchword; 702 | done=UrlRequestGet(url); listDom(xmltoDom(done),cInfo); 703 | cInfo.sname=it.name;cInfo.api=it.api; 704 | vSearch.append(cInfo); 705 | } 706 | 707 | }else{ 708 | VideoInfo cInfo; 709 | api=type.value(ctype-1).api; 710 | url=api+"?wd="+searchword; 711 | done=UrlRequestGet(url);listDom(xmltoDom(done),cInfo); 712 | cInfo.sname=type.value(ctype-1).name;cInfo.api=api; 713 | vSearch.append(cInfo); 714 | } 715 | } 716 | 717 | //组合简介信息 718 | QString todes(VideoInfo cInfo,int index){ 719 | QString str =QString("

%1

%2 %3 %4 %5 %6 %7

%8

") 720 | .arg(cInfo.name.value(index)) 721 | .arg(cInfo.year.value(index)) 722 | .arg(cInfo.area.value(index)) 723 | .arg(cInfo.tname.value(index)) 724 | .arg(cInfo.lang.value(index)) 725 | .arg(cInfo.director.value(index)) 726 | .arg(cInfo.actor.value(index)) 727 | .arg(cInfo.des.value(index)); 728 | return str; 729 | } 730 | 731 | //取文本MD5值 732 | QString toHash(const QString pwd){ 733 | QString md5; 734 | QByteArray ba,bb; 735 | QCryptographicHash md(QCryptographicHash::Md5); 736 | ba.append(pwd); 737 | md.addData(ba); 738 | bb = md.result(); 739 | md5.append(bb.toHex()); 740 | return md5; 741 | } 742 | 743 | 744 | /* 判断文件是不是存在 */ 745 | bool isFileExist(QString fullFileName) 746 | { 747 | QFileInfo fileInfo(fullFileName); 748 | if(fileInfo.isFile()) 749 | { 750 | return true; 751 | } 752 | return false; 753 | } 754 | 755 | //判断文件夹是否存在,不存在则创建,默认假 756 | 757 | bool isDirExist(QString fullPath,bool mk=false) 758 | { 759 | //异常处理 760 | try 761 | { 762 | QDir dir(fullPath); 763 | if(dir.exists()) 764 | { 765 | return true; 766 | } 767 | else 768 | { 769 | if (mk){; 770 | 771 | bool ref= dir.mkdir(fullPath); 772 | 773 | return ref; 774 | 775 | 776 | }else{return false;} 777 | } 778 | 779 | 780 | }catch(int n) 781 | 782 | { 783 | qDebug()<<"num="< 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/camera_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/close_deep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/close_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/front_off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/front_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/front_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/full_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/full_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/general_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/general_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/ico.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | background 6 | 7 | 8 | 9 | Layer 1 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /resource/img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/resource/img/icon.png -------------------------------------------------------------------------------- /resource/img/list_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/list_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/resource/img/loading.gif -------------------------------------------------------------------------------- /resource/img/maximize.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/maximize_deep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/maximize_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | background 6 | 7 | 8 | 9 | Layer 1 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /resource/img/menu_deep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | background 6 | 7 | 8 | 9 | Layer 1 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /resource/img/menu_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | background 6 | 7 | 8 | 9 | Layer 1 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /resource/img/minimize.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/minimize_deep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/minimize_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | background 6 | 7 | 8 | 9 | Layer 1 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/next_off.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/next_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/next_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resource/img/pallette.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/pause_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/pause_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/play_at.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | background 4 | 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/play_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/play_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/setting_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/setting_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/sliderImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/resource/img/sliderImg.png -------------------------------------------------------------------------------- /resource/img/subtitle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/timg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/resource/img/timg.jpeg -------------------------------------------------------------------------------- /resource/img/volume-down_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/volume-down_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/volume-off_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/volume-off_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /resource/img/volume-up_on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/img/volume-up_out.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | -------------------------------------------------------------------------------- /resource/source/live.txt: -------------------------------------------------------------------------------- 1 | CCTV-01,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226226/1.m3u8 2 | CCTV-02,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8 3 | CCTV-03,http://223.110.241.130:6610/gitv/live1/G_CCTV-3-HQ/G_CCTV-3-HQ/ 4 | CCTV-04,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226314/1.m3u8 5 | CCTV-05,http://223.110.241.130:6610/gitv/live1/G_CCTV-5-HQ/G_CCTV-5-HQ/ 6 | CCTV-5+,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226225/1.m3u8 7 | CCTV-06,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225607/index.m3u8 8 | CCTV-07,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8 9 | CCTV-08,http://117.169.124.36:6610/ysten-businessmobile/live/cctv-8/1.m3u8 10 | CCTV-09,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8 11 | CCTV-10,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226227/1.m3u8 12 | CCTV-11,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226315/1.m3u8 13 | CCTV-12,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8 14 | CCTV-13,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225599/index.m3u8 15 | CCTV-14,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8 16 | CCTV-15,http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8 17 | CCTV-16,http://ott-live.olympicchannel.com/out/u/OC1_1.m3u8 18 | CCTV-17,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8 19 | 北京卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226224/1.m3u8 20 | 天津卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226246/1.m3u8 21 | 东方卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226237/1.m3u8 22 | 湖南卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226241/1.m3u8 23 | 浙江卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226247/1.m3u8 24 | 江苏卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226242/1.m3u8 25 | 山东卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226308/1.m3u8 26 | 湖北卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226310/1.m3u8 27 | 安徽卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226223/1.m3u8 28 | 广东卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226238/1.m3u8 29 | 深圳卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226245/1.m3u8 30 | 龙江卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8 31 | 江西卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226243/1.m3u8 32 | 甘肃卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225877/1.m3u8 33 | 新疆卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225901/1.m3u8 34 | 青海卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225893/1.m3u8 35 | 云南卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225902/1.m3u8 36 | 宁夏卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225892/1.m3u8 37 | 内蒙卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225891/1.m3u8 38 | 西藏卫视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225900/1.m3u8 39 | 辽宁卫视,http://112.50.243.8/PLTV/88888888/224/3221225947/1.m3u8 40 | 重庆卫视,http://112.50.243.8/PLTV/88888888/224/3221225949/1.m3u8 41 | 点掌财经,http://112.50.243.7/PLTV/88888888/224/3221226627/1.m3u8 42 | 东南卫视,http://112.50.243.8/PLTV/88888888/224/3221225833/1.m3u8 43 | 四川卫视,http://112.50.243.8/PLTV/88888888/224/3221225835/1.m3u8 44 | 广西卫视,http://112.50.243.8/PLTV/88888888/224/3221225836/1.m3u8 45 | 贵州卫视,http://112.50.243.8/PLTV/88888888/224/3221225838/1.m3u8 46 | 山西卫视,http://112.50.243.8/PLTV/88888888/224/3221225839/1.m3u8 47 | 河南卫视,http://112.50.243.8/PLTV/88888888/224/3221225842/1.m3u8 48 | 陕西卫视,http://112.50.243.8/PLTV/88888888/224/3221225850/1.m3u8 49 | 吉林卫视,http://112.50.243.8/PLTV/88888888/224/3221225851/1.m3u8 50 | 海南卫视,http://112.50.243.8/PLTV/88888888/224/3221225855/1.m3u8 51 | 康巴卫视,http://112.50.243.8/PLTV/88888888/224/3221225856/1.m3u8 52 | 龙江卫视,http://112.50.243.8/PLTV/88888888/224/3221225940/1.m3 53 | 极速汽车,http://112.50.243.8/PLTV/88888888/224/3221226140/1.m3u8 54 | 动漫秀场,http://112.50.243.8/PLTV/88888888/224/3221226141/1.m3u8 55 | 游戏风云,http://112.50.243.8/PLTV/88888888/224/3221226142/1.m3u8 56 | 法治天地,http://112.50.243.8/PLTV/88888888/224/3221226143/1.m3u8 57 | 中教一套,http://112.50.243.8/PLTV/88888888/224/3221225869/1.m3u8 58 | 金鹰卡通,http://112.50.243.8/PLTV/88888888/224/3221225870/1.m3u8 59 | 卡酷少儿,http://112.50.243.8/PLTV/88888888/224/3221225871/1.m3u8 60 | 炫动卡通,http://112.50.243.8/PLTV/88888888/224/3221225872/1.m3u8 61 | 山东教育,http://112.50.243.8/PLTV/88888888/224/3221225873/1.m3u8 62 | 优漫卡通,http://112.50.243.8/PLTV/88888888/224/3221225874/1.m3u8 63 | 凤凰卫视,http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8 64 | 凤凰资讯,http://112.50.243.8/PLTV/88888888/224/3221225901/1.m3u8 65 | 超级电视,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226253/1.m3u8 66 | 超级电影,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226233/1.m3u8 67 | 超级综艺,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226127/1.m3u8 68 | 超级体育,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8 69 | 精品大剧,http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226331/1.m3u8 70 | 家庭剧场,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226330/1.m3u8 71 | 古装剧场,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226300/1.m3u8 72 | 爱情喜剧,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225913/1.m3u8 73 | 动作电影,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226288/1.m3u8 74 | 惊悚悬疑,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226294/1.m3u8 75 | 军旅剧场,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225923/1.m3u8 76 | 海外剧场,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226325/1.m3u8 77 | 军事评论,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225926/1.m3u8 78 | 健康有约,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8 79 | 精品记录,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226332/1.m3u8 80 | 精品体育,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8 81 | 中国功夫,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225951/1.m3u8 82 | 搏击频道,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226297/1.m3u8 83 | 金牌综艺,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225920/1.m3u8 84 | 炫舞未来,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226248/1.m3u8 85 | 农业致富,http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225930/1.m3u8 86 | 纯享4K,http://112.50.243.8/PLTV/88888888/224/3221226825/1.m3u8 87 | 美丽中国,https://hls.cntv.baishancdnx.cn/asp/hls/8000/0303000a/3/default/9891cea600df4e8a83851b1b1ce23194/8000.m3u8 88 | -------------------------------------------------------------------------------- /resource/source/source.txt: -------------------------------------------------------------------------------- 1 | 最大资源,https://api.zuidapi.com/api.php/provide/vod/at/xml/ 2 | 天空资源,https://api.tiankongapi.com/api.php/provide/vod/at/xml/ 3 | 乐播:https://lbapi9.com/api.php/provide/vod/at/xml/ 4 | 5 | 6 | -------------------------------------------------------------------------------- /resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | resource/img/camera_on.svg 4 | resource/img/camera_out.svg 5 | resource/img/front_off.svg 6 | resource/img/front_on.svg 7 | resource/img/front_out.svg 8 | resource/img/full_on.svg 9 | resource/img/general_out.svg 10 | resource/img/ico.svg 11 | resource/img/icon.png 12 | resource/img/list_out.svg 13 | resource/img/loading.gif 14 | resource/img/next_off.svg 15 | resource/img/next_on.svg 16 | resource/img/next_out.svg 17 | resource/img/pallette.svg 18 | resource/img/pause_on.svg 19 | resource/img/pause_out.svg 20 | resource/img/play_at.svg 21 | resource/img/play_on.svg 22 | resource/img/play_out.svg 23 | resource/img/setting_on.svg 24 | resource/img/setting_out.svg 25 | resource/img/sliderImg.png 26 | resource/img/subtitle.svg 27 | resource/img/timg.jpeg 28 | resource/img/volume-down_on.svg 29 | resource/img/volume-down_out.svg 30 | resource/img/volume-off_on.svg 31 | resource/img/volume-off_out.svg 32 | resource/img/volume-up_on.svg 33 | resource/img/volume-up_out.svg 34 | resource/img/minimize.svg 35 | resource/source/live.txt 36 | resource/source/source.txt 37 | resource/img/full_out.svg 38 | resource/img/maximize.svg 39 | resource/img/close.svg 40 | resource/img/menu.svg 41 | resource/img/list_on.svg 42 | resource/img/general_on.svg 43 | resource/img/minimize_light.svg 44 | resource/img/maximize_light.svg 45 | resource/img/menu_light.svg 46 | resource/img/close_light.svg 47 | resource/img/maximize_deep.svg 48 | resource/img/minimize_deep.svg 49 | resource/img/close_deep.svg 50 | resource/img/menu_deep.svg 51 | 52 | 53 | -------------------------------------------------------------------------------- /set.cpp: -------------------------------------------------------------------------------- 1 | #include "set.h" 2 | #include "ui_set.h" 3 | 4 | set::set(QWidget *parent) : 5 | QWidget(parent), 6 | ui(new Ui::set) 7 | { 8 | ui->setupUi(this); 9 | 10 | //窗口居中 11 | move((QApplication::desktop()->width() - width())/2, (QApplication::desktop()->height() - height())/2); 12 | 13 | setWindowFlags(Qt::WindowStaysOnTopHint |windowFlags()); 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | } 22 | 23 | set::~set() 24 | { 25 | delete ui; 26 | } 27 | 28 | void set::quit(){ 29 | 30 | close(); 31 | } 32 | 33 | void set::reshow(){ 34 | 35 | ui->source_edit->setPlainText(Readfile("./source.txt")); 36 | 37 | ui->live_edit->setText(Readfile("./live.txt")); 38 | ui->lineEdit->setText(config.get("set","typeFilter").toString()); 39 | 40 | this->show(); 41 | 42 | } 43 | 44 | 45 | 46 | void set::on_source_esc_clicked() 47 | { 48 | close(); 49 | } 50 | 51 | void set::on_pushButton_live_esc_clicked() 52 | { 53 | close(); 54 | } 55 | 56 | void set::on_pushButton_live_ok_clicked() 57 | { 58 | if(Writefile("./live.txt",ui->live_edit->toPlainText())){ 59 | QMessageBox::information(this, "提示", "保存成功!",QMessageBox::Yes); 60 | } 61 | 62 | } 63 | 64 | void set::on_source_ok_clicked() 65 | { 66 | config.set("set","typeFilter",ui->lineEdit->text()); 67 | if(Writefile("./source.txt",ui->source_edit->toPlainText())) 68 | { 69 | QMessageBox ::information(this, "提示", "保存成功!",QMessageBox::Yes); 70 | 71 | 72 | }; 73 | } 74 | -------------------------------------------------------------------------------- /set.h: -------------------------------------------------------------------------------- 1 | #ifndef SET_H 2 | #define SET_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include "config.h" 9 | 10 | 11 | namespace Ui { 12 | class set; 13 | } 14 | 15 | class set : public QWidget 16 | { 17 | Q_OBJECT 18 | 19 | public: 20 | explicit set(QWidget *parent = nullptr); 21 | ~set(); 22 | 23 | private slots: 24 | void on_source_esc_clicked(); 25 | 26 | void on_pushButton_live_esc_clicked(); 27 | 28 | void on_pushButton_live_ok_clicked(); 29 | 30 | void on_source_ok_clicked(); 31 | 32 | void reshow(); 33 | 34 | void quit(); 35 | 36 | private: 37 | Ui::set *ui; 38 | Config config; 39 | 40 | QString Readfile(const QString pfile) 41 | { 42 | QString ba; 43 | QFile file(pfile); 44 | if( file.open(QIODevice::ReadOnly|QIODevice::Text) ){ 45 | 46 | for(int i=0; !file.atEnd();i++){ 47 | QByteArray line = file.readLine(); 48 | QString str(line); 49 | if(str!=""){ 50 | ba+=str.toUtf8(); 51 | } 52 | } 53 | file.close(); 54 | } 55 | return ba; 56 | } 57 | 58 | 59 | 60 | bool Writefile(const QString pfile,QString data) 61 | { 62 | QByteArray ba; 63 | 64 | 65 | bool ret=false; 66 | QFile file(pfile); 67 | if( file.open(QIODevice::WriteOnly|QIODevice::Text) ){ 68 | 69 | ret=file.write(data.toUtf8()); 70 | 71 | file.close(); 72 | } 73 | return ret; 74 | } 75 | 76 | }; 77 | 78 | 79 | #endif // SET_H 80 | -------------------------------------------------------------------------------- /set.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | set 4 | 5 | 6 | Qt::WindowModal 7 | 8 | 9 | 10 | 0 11 | 0 12 | 864 13 | 533 14 | 15 | 16 | 17 | Qt::WheelFocus 18 | 19 | 20 | 资源设置 21 | 22 | 23 | 24 | 25 | 26 | Qt::LeftToRight 27 | 28 | 29 | 0 30 | 31 | 32 | 33 | 资源 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 80 43 | 20 44 | 45 | 46 | 47 | 48 | 80 49 | 20 50 | 51 | 52 | 53 | 分类过滤: 54 | 55 | 56 | 57 | 58 | 59 | 60 | 输入格式:福利片|伦理片 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 80 73 | 20 74 | 75 | 76 | 77 | 78 | 80 79 | 20 80 | 81 | 82 | 83 | 资源设置: 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | Qt::Horizontal 98 | 99 | 100 | 101 | 40 102 | 20 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 80 112 | 32 113 | 114 | 115 | 116 | 保存 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 80 125 | 32 126 | 127 | 128 | 129 | 关闭 130 | 131 | 132 | 133 | 134 | 135 | 136 | Qt::Horizontal 137 | 138 | 139 | 140 | 40 141 | 20 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 直播 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | Qt::Horizontal 164 | 165 | 166 | 167 | 40 168 | 20 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 80 178 | 32 179 | 180 | 181 | 182 | 保存 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 80 191 | 32 192 | 193 | 194 | 195 | 关闭 196 | 197 | 198 | 199 | 200 | 201 | 202 | Qt::Horizontal 203 | 204 | 205 | 206 | 40 207 | 20 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | -------------------------------------------------------------------------------- /vst-video: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xymov/vst-video/b5ba4b0ef7c9bc3a11620f5b40c3bb347231c264/vst-video -------------------------------------------------------------------------------- /vst-video.pro: -------------------------------------------------------------------------------- 1 | QT += core gui multimedia multimediawidgets xml concurrent 2 | 3 | 4 | 5 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 6 | 7 | CONFIG += c++11 8 | 9 | # The following define makes your compiler emit warnings if you use 10 | # any Qt feature that has been marked deprecated (the exact warnings 11 | # depend on your compiler). Please consult the documentation of the 12 | # deprecated API in order to know how to port your code away from it. 13 | DEFINES += QT_DEPRECATED_WARNINGS 14 | 15 | # You can also make your code fail to compile if it uses deprecated APIs. 16 | # In order to do so, uncomment the following line. 17 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 18 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 19 | 20 | SOURCES += \ 21 | config.cpp \ 22 | main.cpp \ 23 | mainwindow.cpp \ 24 | set.cpp 25 | 26 | HEADERS += \ 27 | config.h \ 28 | mainwindow.h \ 29 | set.h 30 | 31 | FORMS += \ 32 | mainwindow.ui \ 33 | set.ui 34 | 35 | # Default rules for deployment. 36 | qnx: target.path = /tmp/$${TARGET}/bin 37 | else: unix:!android: target.path = /opt/$${TARGET}/bin 38 | !isEmpty(target.path): INSTALLS += target 39 | 40 | RESOURCES += \ 41 | resources.qrc 42 | 43 | RC_ICONS =icon.ico 44 | 45 | 46 | DISTFILES += \ 47 | README.md \ 48 | deb/DEBIAN/control \ 49 | deb/install.sh \ 50 | deb/usr/share/applications/vst-video.desktop \ 51 | deb/usr/share/icons/vst-video.png \ 52 | deb/usr/src/vst-video/ico.png \ 53 | deb/usr/src/vst-video/install.sh \ 54 | deb/usr/src/vst-video/vst-video \ 55 | deb/usr/src/vst-video/vst-video.sh \ 56 | install/DEBIAN/control \ 57 | install/QIFW/README \ 58 | install/QIFW/config/config.xml \ 59 | install/QIFW/packages/net.xymov.ifw/data/LICENSE \ 60 | install/QIFW/packages/net.xymov.ifw/data/vst-video \ 61 | install/QIFW/packages/net.xymov.ifw/meta/installscript.qs \ 62 | install/QIFW/packages/net.xymov.ifw/meta/package.xml \ 63 | install/README \ 64 | install/README.md \ 65 | install/appimage/bin/appimagetool \ 66 | install/appimage/bin/linuxdeployqt \ 67 | install/appimage/bin/patchelf \ 68 | install/appimage/icon.png.png \ 69 | install/appimage/install.sh \ 70 | install/appimage/vst-video.desktop \ 71 | install/bin/README.md \ 72 | install/bin/appimagetool \ 73 | install/bin/install.sh \ 74 | install/bin/linuxdeployqt \ 75 | install/bin/patchelf \ 76 | install/config/config.xml \ 77 | install/deb/DEBIAN/control \ 78 | install/deb/getdll.sh \ 79 | install/deb/install.sh \ 80 | install/deb/output/DEBIAN/control \ 81 | install/deb/output/usr/share/applications/vst-video.desktop \ 82 | install/deb/output/usr/share/icons/vst-video.png \ 83 | install/deb/output/usr/src/vst-video/ico.png \ 84 | install/deb/output/usr/src/vst-video/install.sh \ 85 | install/deb/output/usr/src/vst-video/vst-video \ 86 | install/deb/output/usr/src/vst-video/vst-video.sh \ 87 | install/deb/usr/share/applications/vst-video.desktop \ 88 | install/deb/usr/share/icons/vst-video.png \ 89 | install/deb/usr/src/vst-video/ico.png \ 90 | install/deb/usr/src/vst-video/install.sh \ 91 | install/deb/usr/src/vst-video/vst-video \ 92 | install/deb/usr/src/vst-video/vst-video.sh \ 93 | install/install.sh \ 94 | install/install.sh \ 95 | install/packages/net.xymov.ifw/data/LICENSE \ 96 | install/packages/net.xymov.ifw/data/vst-video \ 97 | install/packages/net.xymov.ifw/meta/installscript.qs \ 98 | install/packages/net.xymov.ifw/meta/package.xml \ 99 | install/usr/lib/vst-video/libFLAC.so.8 \ 100 | install/usr/lib/vst-video/libGL.so.1 \ 101 | install/usr/lib/vst-video/libGLX.so.0 \ 102 | install/usr/lib/vst-video/libGLdispatch.so.0 \ 103 | install/usr/lib/vst-video/libICE.so.6 \ 104 | install/usr/lib/vst-video/libQt5Concurrent.so.5 \ 105 | install/usr/lib/vst-video/libQt5Core.so.5 \ 106 | install/usr/lib/vst-video/libQt5Gui.so.5 \ 107 | install/usr/lib/vst-video/libQt5Multimedia.so.5 \ 108 | install/usr/lib/vst-video/libQt5MultimediaWidgets.so.5 \ 109 | install/usr/lib/vst-video/libQt5Network.so.5 \ 110 | install/usr/lib/vst-video/libQt5OpenGL.so.5 \ 111 | install/usr/lib/vst-video/libQt5Widgets.so.5 \ 112 | install/usr/lib/vst-video/libQt5Xml.so.5 \ 113 | install/usr/lib/vst-video/libSM.so.6 \ 114 | install/usr/lib/vst-video/libX11-xcb.so.1 \ 115 | install/usr/lib/vst-video/libX11.so.6 \ 116 | install/usr/lib/vst-video/libXau.so.6 \ 117 | install/usr/lib/vst-video/libXdmcp.so.6 \ 118 | install/usr/lib/vst-video/libXext.so.6 \ 119 | install/usr/lib/vst-video/libXi.so.6 \ 120 | install/usr/lib/vst-video/libXtst.so.6 \ 121 | install/usr/lib/vst-video/libasyncns.so.0 \ 122 | install/usr/lib/vst-video/libbsd.so.0 \ 123 | install/usr/lib/vst-video/libc.so.6 \ 124 | install/usr/lib/vst-video/libcap.so.2 \ 125 | install/usr/lib/vst-video/libdbus-1.so.3 \ 126 | install/usr/lib/vst-video/libdl.so.2 \ 127 | install/usr/lib/vst-video/libdouble-conversion.so.1 \ 128 | install/usr/lib/vst-video/libfreetype.so.6 \ 129 | install/usr/lib/vst-video/libgcc_s.so.1 \ 130 | install/usr/lib/vst-video/libgcrypt.so.20 \ 131 | install/usr/lib/vst-video/libglib-2.0.so.0 \ 132 | install/usr/lib/vst-video/libgpg-error.so.0 \ 133 | install/usr/lib/vst-video/libgraphite2.so.3 \ 134 | install/usr/lib/vst-video/libharfbuzz.so.0 \ 135 | install/usr/lib/vst-video/libicudata.so.63 \ 136 | install/usr/lib/vst-video/libicui18n.so.63 \ 137 | install/usr/lib/vst-video/libicuuc.so.63 \ 138 | install/usr/lib/vst-video/liblz4.so.1 \ 139 | install/usr/lib/vst-video/liblzma.so.5 \ 140 | install/usr/lib/vst-video/libm.so.6 \ 141 | install/usr/lib/vst-video/libnsl.so.1 \ 142 | install/usr/lib/vst-video/libogg.so.0 \ 143 | install/usr/lib/vst-video/libpcre.so.3 \ 144 | install/usr/lib/vst-video/libpcre2-16.so.0 \ 145 | install/usr/lib/vst-video/libpng16.so.16 \ 146 | install/usr/lib/vst-video/libpthread.so.0 \ 147 | install/usr/lib/vst-video/libpulse-mainloop-glib.so.0 \ 148 | install/usr/lib/vst-video/libpulse.so.0 \ 149 | install/usr/lib/vst-video/libpulsecommon-12.2.so \ 150 | install/usr/lib/vst-video/libresolv.so.2 \ 151 | install/usr/lib/vst-video/librt.so.1 \ 152 | install/usr/lib/vst-video/libsndfile.so.1 \ 153 | install/usr/lib/vst-video/libstdc++.so.6 \ 154 | install/usr/lib/vst-video/libsystemd.so.0 \ 155 | install/usr/lib/vst-video/libuuid.so.1 \ 156 | install/usr/lib/vst-video/libvorbis.so.0 \ 157 | install/usr/lib/vst-video/libvorbisenc.so.2 \ 158 | install/usr/lib/vst-video/libwrap.so.0 \ 159 | install/usr/lib/vst-video/libxcb.so.1 \ 160 | install/usr/lib/vst-video/libz.so.1 \ 161 | install/usr/share/applications/vst-video.desktop \ 162 | install/usr/share/icons/vst-video.png \ 163 | install/usr/src/vst-video/ico.png \ 164 | install/usr/src/vst-video/install.sh \ 165 | install/usr/src/vst-video/live.txt \ 166 | install/usr/src/vst-video/source.txt \ 167 | install/usr/src/vst-video/vst-video \ 168 | install/usr/src/vst-video/vst-video.sh \ 169 | vst-video \ 170 | icon.png 171 | 172 | SUBDIRS += \ 173 | install/QIFW/vst-video.pro \ 174 | install/QIFW/vst-video.pro \ 175 | install/vst-video.pro 176 | --------------------------------------------------------------------------------